package process

import (
	"code.project.com/chatroom/client/utils"
	"code.project.com/chatroom/common/message"
	"encoding/json"
	"fmt"
	"net"
	"os"
)

// 显示登陆后的界面..
func ShowMenu() {
	fmt.Println("恭喜xxx登录成功")
	fmt.Println("1.显示在线用户列表")
	fmt.Println("2.发送消息")
	fmt.Println("3.信息列表")
	fmt.Println("4.退出系统")
	fmt.Println("请选择(1-4)")
	var key int
	var content string

	// 因为我们总会使用到 SmsProcess 的实例 防止多次创建实例
	smsProcess := &SmsProcess{}
	fmt.Scanln(&key)
	switch key {
	case 1:
		outputOnlineUser()
	case 2:
		// 群发消息
		fmt.Println("请输入你想对大家说的话:")
		_, _ = fmt.Scanln(&content)
		_ = smsProcess.SendGroup(content)
		fmt.Println("发送消息")
	case 3:
		fmt.Println("信息列表")
	case 4:
		os.Exit(0)
	default:
		fmt.Println("暂无此功能")
	}
}

func serverProcessMsg(conn net.Conn) {
	// 创建一个transfer实例 不停的读取服务区发送的消息
	tf := &utils.Transfer{
		Conn: conn,
	}
	for {
		// 客户端不停地读取
		fmt.Println("客户端正在等待读取服务器发送的消息...")
		mes, err := tf.ReadPkg()
		if err != nil {
			fmt.Println("服务器端出错了")
			return
		}
		// 如果读取到消息,有事下一步处理逻辑
		switch mes.Type {
		case message.NotifyUserMesType: // 有人上线
			// 1. 取出 notifyUserStatusMes
			var notifyUserStatusMes message.NotifyUserStatusMes
			_ = json.Unmarshal([]byte(mes.Data), &notifyUserStatusMes)
			// 2. 把用户的信息保存到 客户的 map[int]User 中
			updateUserStatus(&notifyUserStatusMes)
		case message.SmsMesType:  // 有人群发消息
			outPutGroupMes(&mes)
		default:
			fmt.Println("你返回一个我暂时不能处理的类型")

		}
		//fmt.Println("msg=", mes)
	}

}
